﻿using System;
using System.Collections;
using System.Collections.Generic;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using BLL.DataContextClasses;

namespace BLL.BusinessClasses
{
    public class Contacto     //Esta clase deberia ser private
    {
        // Campos
        private int id;
        private int tipoContactoID;
        private string tipoContacto;        
        private string descripcion;

        // Propiedades
        public int ID
        {
            get { return this.id; }
        }
        public int TipoContactoID
        {
            get { return this.tipoContactoID; }
            set { this.tipoContactoID = value; }
        }
        public string TipoContacto
        {
            get { return this.tipoContacto; }
            set { this.tipoContacto = value.Trim(); }
        }
        public string Descripcion
        {
            get { return this.descripcion; }
            set { this.descripcion = value.Trim(); }
        }

        //Constructores
        public Contacto(int IDToSearch)
        {
            try
            {
                DataClassesDataContext DB = new DataClassesDataContext();

                DataContextClasses.Contacto Con = (from c in DB.Contactos
                                                   where c.ID == IDToSearch
                                                   select c).First();

                this.id = Con.ID;
                this.tipoContacto = Con.TiposContacto.Descripcion;
                this.descripcion = Con.Contacto1;
            }
            catch (SqlException SqlEx)
            {
                throw new Exception("No existe tal contacto\n" + SqlEx.Message);
            }
        }

        public Contacto(int NewTipoContactoID, string NewDescripcion)
        {
            this.tipoContactoID = NewTipoContactoID;
            this.descripcion = NewDescripcion;
        }

        //Metodo
        public static List<Contacto> GetContactosByEgresadoID(int EgresadoID)
        {
            DataClassesDataContext DB = new DataClassesDataContext();
            
            try
            {
                var Contactos = (from c in DB.Contactos
                                 where c.ID_Usuario == EgresadoID && c.TipoUsuario == "Egresado"
                                 select c.ID);

                List<Contacto> ContactosDeEgresado = new List<Contacto>();

                foreach (int item in Contactos)
                {
                    ContactosDeEgresado.Add(new Contacto(item));
                }
                return ContactosDeEgresado;
            }
            catch (SqlException SqlEx)
            {
                throw new Exception("Hubo un problema con la Base de datos\n" + SqlEx.Message);
            }
        }
        public static List<Contacto> GetContactosByEstudianteID(int EstudianteID)
        {
            DataClassesDataContext DB = new DataClassesDataContext();

            try
            {
                var Contactos = (from c in DB.Contactos
                                 where c.ID_Usuario == EstudianteID && c.TipoUsuario == "Estudiante"
                                 select c.ID);

                List<Contacto> ContactosDeEgresado = new List<Contacto>();

                foreach (int item in Contactos)
                {
                    ContactosDeEgresado.Add(new Contacto(item));
                }
                return ContactosDeEgresado;
            }
            catch (SqlException SqlEx)
            {
                throw new Exception("Hubo un problema con la Base de datos\n" + SqlEx.Message);
            }
        }
        public static List<Contacto> GetContactosByEmpresaID(int EmpresaID)
        {
            DataClassesDataContext DB = new DataClassesDataContext();

            try
            {
                var Contactos = (from c in DB.Contactos
                                 where c.ID_Usuario == EmpresaID && c.TipoUsuario == "Empresa"
                                 select c.ID);

                List<Contacto> ContactosDeEmpresa = new List<Contacto>();

                foreach (int item in Contactos)
                {
                    ContactosDeEmpresa.Add(new Contacto(item));
                }
                return ContactosDeEmpresa;
            }
            catch (SqlException SqlEx)
            {
                throw new Exception("Hubo un problema con la Base de datos\n" + SqlEx.Message);
            }
        }

        public static List<Contacto> GetDestinatariosByEnvioID(int EnvioID)
        {
            DataClassesDataContext DB = new DataClassesDataContext();

            try
            {
                var Contactos = (from c in DB.Envios_Contactos
                                 where c.ID_Envio == EnvioID
                                 select c.ID_Contacto);

                List<Contacto> DestinatariosDeEnvio = new List<Contacto>();

                foreach (int item in Contactos)
                {
                    DestinatariosDeEnvio.Add(new Contacto(item));
                }
                return DestinatariosDeEnvio;
            }
            catch (SqlException SqlEx)
            {
                throw new Exception("Hubo un problema con la Base de datos\n" + SqlEx.Message);
            }
        }

        public static int GetIDByTipoContactoDescripcion(string DescripcionToSearch) 
        {
            DataClassesDataContext DB = new DataClassesDataContext();

            try
            {
                return (from tc in DB.TiposContactos
                        where tc.Descripcion == DescripcionToSearch
                        select tc).First().ID;
            }
            catch (SqlException SqlEx)
            {
                throw new Exception("Hubo un problema con la Base de datos\n" + SqlEx.Message);
            }
        }

        public static string GetDescripcionByTipoContactoID(int IDToSearch) 
        {
            DataClassesDataContext DB = new DataClassesDataContext();

            try
            {
                return (from tc in DB.TiposContactos
                        where tc.ID == IDToSearch
                        select tc).First().Descripcion;
            }
            catch (SqlException SqlEx)
            {
                throw new Exception("Hubo un problema con la Base de datos\n" + SqlEx.Message);
            }
        }
    }
}
